package aufgabe2;

import java.util.ArrayList;
import java.util.GregorianCalendar;
import java.util.HashMap;

public interface Subscribeable {

    /**
     * subscribes a student to the subscribeable
     * 
     * @param subscriber
     * @param date on which day the subscription happens
     * @throws CourseException
     *             iff any subscription criteria is not met, message must
     *             contain the reason why subscription did not work
     */
    public void subscribeStudent(Student subscriber, GregorianCalendar date)
            throws CourseException;
    
    public void unsubscribeStudent(Student student, GregorianCalendar today)
        throws CourseException;
    
    public String getTitle();
    
    public void setTitle(String title) throws AccessDeniedException;
    
    public int getId();
    
    public void setId(int id);
    
    public int numberOfSubscribedStudents();
    
    public void setMaxSeats(int max) throws CourseException, AccessDeniedException;
    
    public GregorianCalendar getSubscribeStart();
    
    public void setSubscribeStart(GregorianCalendar subscribeStart) throws AccessDeniedException;
    
    public GregorianCalendar getSubscribeEnd();
    
    public void setSubscribeEnd(GregorianCalendar subscribeEnd) throws AccessDeniedException;
    
    public GregorianCalendar getUnsubscribeEnd();
    
    public void setUnsubscribeEnd(GregorianCalendar unsubscribeEnd) throws AccessDeniedException;
    
    public ArrayList<Course> getRequirements();
    
    public int getMaxSeats();
    
    
    
    public HashMap<Integer, Teacher> getTeachers();
    
    public void addTeacher(Teacher teacher) throws AccessDeniedException;
}
